package visiopuce.ui.listener;

import java.util.Iterator;

import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;

import visiopuce.ApplicationContexte;
import visiopuce.objets.Analyse;
import visiopuce.service.AnalyseServiceImpl;
import visiopuce.service.DroitServiceImpl;
import visiopuce.ui.tree.AlterationNode;
import visiopuce.ui.tree.AnalyseNode;
import visiopuce.ui.tree.DossierNode;
import visiopuce.ui.tree.PrelevementNode;
import visiopuce.ui.tree.PuceNode;
import visiopuce.ui.tree.ResultatNode;
import visiopuce.ui.tree.TreeNode;
import visiopuce.ui.view.AnalyseTabItem;
import visiopuce.ui.view.DossierEditor;

public class DoubleClickNavigationListener implements IDoubleClickListener {

	public void doubleClick(DoubleClickEvent event) {
		// if the selection is empty clear the label
		if (event.getSelection().isEmpty()) {
			System.out.println("la selection dans l'arbre est vide");
			return;
		}
		if (event.getSelection() instanceof IStructuredSelection) {
			IStructuredSelection selection = (IStructuredSelection) event.getSelection();
			StringBuffer toShow = new StringBuffer();
			for (Iterator iterator = selection.iterator(); iterator.hasNext();) {
				Object domain = (TreeNode) iterator.next();
				TreeNode child = (TreeNode) domain;
				if (child instanceof DossierNode  && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "personne")) {
					DossierNode dossierNode = (DossierNode) child;
					IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
					if (editeurActif instanceof DossierEditor) {
						DossierEditor editeur = (DossierEditor) editeurActif;
					
							editeur.getTabFolder().setSelection(editeur.getDossierTabItem().getTabItem());
						
					}
				} else if (child instanceof PrelevementNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement")) {
					PrelevementNode prelevementNode = (PrelevementNode) child;
					IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
					if (editeurActif instanceof DossierEditor) {
						DossierEditor editeur = (DossierEditor) editeurActif;
						if (editeur.getPrelevementTabItems().containsKey(prelevementNode.getPrelevement().getIdPrelevement())) {
							editeur.getTabFolder().setSelection(editeur.getPrelevementTabItems().get(prelevementNode.getPrelevement().getIdPrelevement()).getTabItem());
						} else {
							editeur.addPrelevementTabItem(prelevementNode.getPrelevement());

						}
					}

				} else if (child instanceof AnalyseNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "analyse")) {
					AnalyseNode analyseNode = (AnalyseNode) child;
					IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
					if (editeurActif instanceof DossierEditor) {
						DossierEditor editeur = (DossierEditor) editeurActif;
						if (editeur.getAnalyseTabItems().containsKey(analyseNode.getAnalyse().getIdAnalyse())) {
							editeur.getTabFolder().setSelection(editeur.getAnalyseTabItems().get(analyseNode.getAnalyse().getIdAnalyse()).getTabItem());
						} else {
							editeur.addAnalyseTabItem(analyseNode.getAnalyse());

						}
					}

				} else if (child instanceof ResultatNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "resultat")) {
					ResultatNode resultatNode = (ResultatNode) child;
					IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
					if (editeurActif instanceof DossierEditor) {
						DossierEditor editeur = (DossierEditor) editeurActif;
						if (editeur.getAnalyseTabItems().containsKey(resultatNode.getResultat().getAnalyse().getIdAnalyse())) {
							editeur.getTabFolder().setSelection(editeur.getAnalyseTabItems().get(resultatNode.getResultat().getAnalyse().getIdAnalyse()).getTabItem());
						} else {
							editeur.addAnalyseTabItem(AnalyseServiceImpl.getInstance().getAnalyseByIdAnalyse(resultatNode.getResultat().getAnalyse().getIdAnalyse()));
						}
						AnalyseTabItem ati = editeur.getAnalyseTabItems().get(resultatNode.getResultat().getAnalyse().getIdAnalyse());
						ati.selectResultat(resultatNode.getResultat());
					}

				} else if (child instanceof PuceNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "puce")) {
					PuceNode puceNode = (PuceNode) child;
					IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
					if (editeurActif instanceof DossierEditor) {
						DossierEditor editeur = (DossierEditor) editeurActif;
						if (editeur.getPuceTabItems().containsKey(puceNode.getPuce().getIdPuce())) {
							editeur.getTabFolder().setSelection(editeur.getPuceTabItems().get(puceNode.getPuce().getIdPuce()).getTabItem());
						} else {
							editeur.addPuceTabItem(puceNode.getPuce());

						}
					}
				} else if (child instanceof AlterationNode && DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "alteration")) {
					AlterationNode altNode = (AlterationNode) child;
					IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
					if (editeurActif instanceof DossierEditor) {
						DossierEditor editeur = (DossierEditor) editeurActif;
						if (editeur.getCNVTabItems().containsKey(altNode.getAlteration().getIdAlteration())) {
							editeur.getTabFolder().setSelection(editeur.getCNVTabItems().get(altNode.getAlteration().getIdAlteration()).getTabItem());
						} else {
							editeur.addCNVTabItem(altNode.getAlteration());

						}
					}
				}

			}
		}
	}
}
